Skip to content

BWB300 baseline model bench test#1015

Open
xjjiang wants to merge 71 commits intoOpenMDAO:mainfrom
xjjiang:BWB_FLOPS_300
Open

BWB300 baseline model bench test#1015
xjjiang wants to merge 71 commits intoOpenMDAO:mainfrom
xjjiang:BWB_FLOPS_300

Conversation

@xjjiang
Copy link
Copy Markdown
Contributor

@xjjiang xjjiang commented Mar 4, 2026

Summary

This PR implements another BWB model from FLOPS - BWB300 baseline model.

The BWB300 baseline model implemented here is not exactly the same as the original FLOPS model. This is because Aviary did not implement all the features of FLOPS. More precisely, here are the differences:

  • Set NOPRO = 0, Takeoff profile for noise because noise module is not implemented in Aviary.
  • Do not set WF = 50.0 because the scenario Aircraft.Fuselage.MAX_WIDTH = 50.0 is not implemented in BWBDetailedCabinLayout component. Can override later.
  • Do not set DF = 14.16 because the scenario Aircraft.Fuselage.MAX_HEIGHT = 14.16 is not implemented in BWBDetailedCabinLayout component. Can override later.
  • Do not set XLW = 50.0, In Aviary, it is mapped to Aircraft.Wing.ROOT_CHORD which is an output from BWBDetailedCabinLayout component. Can override later.
  • Set DGW = 600000., ! We set Mission.Design.GROSS_MASS = 600,000 manually. The original logic is DGW = 1, IF(DGW < 5) DG = DGW * GW, but GW is not read in to Aviary. Should we create a new Aviary variable for GW (Ramp weight)?
  • GLOV = 1230.5, ! Originally, GLOV = 0, but computation of Aircraft.Wing.GLOVE_AND_BAT is not implemented. So, take the value from FLOPS run. See subroutine DEFINE().
  • SPAN = 186.631829293424, ! Aircraft.Wing.SPAN = 186.3 is incorrect. FLOPS updates value during its run. If we input both Aircraft.Wing.SPAN and Aircraft.Wing.OUTBOARD_SEMISPAN, they must satisfy Aircraft.Wing.SPAN Aircraft.Fuselage.MAX_WIDTH + Aircraft.Wing.OUTBOARD_SEMISPAN*2.
  • TCSOB is not read in to Aviary. Assume it is the same as TCF (i.e. Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO). Should we add TCSOB (meaning Fuselage thickness/chord ratio at side of body) to Aviary? This will affect the computation of BWB_THICKNESS_TO_CHORD_DISTRIBUTION[1].
  • Aircraft.VerticalTail.WETTED_AREA = 125, even though Aircraft.VerticalTail.NUM_TAILS = 0. It is ignored.
  • AR = 5.4252, 0.0, 0.0, 0.0, 0.0, 0.0, is a design variable. But when FLOPS runs, AR is computed. In my aviary model, I have to comment out the line aircraft:wing:aspect_ratio,5.4252,unitless in .csv file in order to follow FLOPS computation.
  • Do not set HHT = -100. This scenario (Aircraft.HorizontalTail.VERTICAL_TAIL_FRACTION) is not taken care by fortran_to_aviary().
  • Do not set SWPVT = -100. This scenario (i.e. Aircraft.VerticalTail.SWEEP) is not taken care by fortran_to_aviary().
  • Do not set ARVT = -100. This scenario (i.e. Aircraft.VerticalTail.ASPECT_RATIO) is not taken care by fortran_to_aviary().
  • Do not set TRVT = -100. This scenario (i.e. Aircraft.VerticalTail.TAPER_RATIO) is not taken care by fortran_to_aviary().
  • Do not set FULWMX = -1. This scenario (i.e. Aircraft.Fuel.WING_FUEL_CAPACITY) is not taken care by fortran_to_aviary().

Related Issues

  • Resolves #

Backwards incompatibilities

None

New Dependencies

None

… the different result of Aircraft.Wing.BENDING_MATERIAL_FACTOR (or BT as returned by subroutine BNDMAT) between Aviary and FLOPS.
@xjjiang xjjiang marked this pull request as ready for review March 9, 2026 23:36
prob.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, val=86.75)
prob.set_val(Aircraft.Fuselage.LENGTH, val=112.3001936860821)
prob.set_val(Aircraft.Wing.THICKNESS_TO_CHORD, val=0.11)
prob.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, val=0.11)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a very confusing variable and we need to be very careful with how we use it.
When someone says height to width ratio I think of the cross sectional area in the y-z plane. Thickness to chord for the wing would kind of be height to length ratio for the fusealge, with a cross section in the x-z plane.

I worry that this variable is being used in the 'conventional sense' for gasp based tube and wing aircraft, but then being used as thickness to chord for FLOPS based BWB.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, the use of Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO is not ideal. In FLOPS, the variable is TCSOB for which we don't have a corresponding Aviary variable. Because TCSOB is default to TCF which corresponds to Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO. That is why I use it.

ar = inputs[Aircraft.Wing.ASPECT_RATIO]
arref = inputs[Aircraft.Wing.ASPECT_RATIO_REFERENCE]
if arref[0] == 0:
arref[0] = ar[0]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we output a warning here that no reference was supplied and therefore we are assuming the value equal to the input?

Warning Aircraft.Wing.ASPECT_RATIO_REFERENCE = 0 assuming Aircraft.Wing.ASPECT_RATIO_REFERENCE = Aircraft.Wing.ASPECT_RATIO = {ar}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps this can't be done here, but if it's necessary perhaps we need to do it in preprocessors?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we always assume that Aircraft.Wing.ASPECT_RATIO_REFERENCE = Aircraft.Wing.ASPECT_RATIO when Aircraft.Wing.ASPECT_RATIO_REFERENCE is missing? For now, I added a warning.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is something that should be done in the preprocessors, we should not be changing inputs like this during calculations

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preprocessors deals with options as it is named as preprocess_options() but Aircraft.Wing.ASPECT_RATIO_REFERENCE is not an option. Where do you want to process this variable?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The name is misleading - it doesn't have to just do options. The options in preprocess_options is referring to the aviary_options argument, we used to use aviary_inputs and aviary_options interchangeably.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants